package cn.dujc.superkid.api;

import java.io.File;
import java.util.Map;

import cn.dujc.superkid.bean.ConsumptionResult;
import cn.dujc.superkid.bean.GoodQuestionResult;
import cn.dujc.superkid.bean.IsSignInResult;
import cn.dujc.superkid.bean.LearningProcessResult;
import cn.dujc.superkid.bean.MemberVipResult;
import cn.dujc.superkid.bean.MessageResult;
import cn.dujc.superkid.bean.MyAskResult;
import cn.dujc.superkid.bean.MyClassResult;
import cn.dujc.superkid.bean.MyExamineResult;
import cn.dujc.superkid.bean.MyTestMessageResult;
import cn.dujc.superkid.bean.MyVideoMessageResult;
import cn.dujc.superkid.bean.ProcessingAnswersResult;
import cn.dujc.superkid.bean.QuestionRedoResult;
import cn.dujc.superkid.bean.QuestionResultsResult;
import cn.dujc.superkid.bean.SignInResult;
import cn.dujc.superkid.bean.StartRankingResult;
import cn.dujc.superkid.bean.StartResult;
import cn.dujc.superkid.bean.WrongQuestionResult;
import okhttp3.MultipartBody;
import okhttp3.RequestBody;
import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.FieldMap;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.Multipart;
import retrofit2.http.POST;
import retrofit2.http.Part;
import retrofit2.http.PartMap;
import retrofit2.http.QueryMap;

/**
 * 4、用户中心
 */
public interface ApiUserCenter {

    /**
     * 提交签到
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * logincode	是	string	登陆验证代码
     */
    @FormUrlEncoded
    @POST("member/signIn")
    public Call<Result<SignInResult>> memberSignIn(@FieldMap QMap map);

    /**
     * 查询今日是否签到
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * logincode	是	string	登陆验证码
     */
    @GET("member/isSignIn")
    public Call<Result<IsSignInResult>> memberIsSignIn(@QueryMap QMap map);

    /**
     * 修改用户信息
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * nicename	是	string	用户姓名
     * sex	是	int	性别（1-男，2-女）
     * logincode	是	string	登陆验证代码
     */
    @FormUrlEncoded
    @POST("member/change_info")
    public Call<Result<Object>> memberChangeInfo(@FieldMap QMap map);

    /**
     * 修改用户头像
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * pic_file	是	string	图片地址
     * logincode	是	string	登陆验证代码
     *
     * @return 返回头像地址
     */
//    @Multipart
//    @POST("member/portrait")
//    public Call<Result<Object>> memberPortrait(@FieldMap QMap params, @Part MultipartBody.Part file);
    @Multipart
    @POST("member/portrait")
    public Call<Result<Object>> memberPortrait(@PartMap Map<String,Object> params,@Part MultipartBody.Part file);




    /**
     * 查询用户vip信息
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     */
    @GET("member/vip")
    public Call<Result<MemberVipResult>> memberVip(@QueryMap QMap map);

    /**
     * 修改密码
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * password	是	string	旧密码 （6~14位），无需md5加密
     * password_new	是	string	新密码（6~14位），无需md5加密
     * logincode	是	string	登陆验证代码
     */
    @FormUrlEncoded
    @POST("member/change_pw")
    public Call<Result<Object>> memberChangePassword(@FieldMap QMap map);

    /**
     * 获得星星和级别
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     */
    @GET("member/star")
    public Call<Result<StartResult>> memberStar(@QueryMap QMap map);

    /**
     * 星星排行榜
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * genre	是	string	请传入排行榜类型("week"-周排行,"month"-月排行,"total"-总排行,"fs"-封神榜)
     */
    @GET("member/starRanking")
    public Call<Result<StartRankingResult>> memberStarRanking(@QueryMap QMap map);

    /**
     * 是否开启了排行榜
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * logincode	是	string	登陆验证码
     *
     * @return 返回数据(1 - 开启 ， 2 - 关闭)
     */
    @GET("member/user_is_integral")
    public Call<Result<String>> memberUserIsIntegral(@QueryMap QMap map);

    /**
     * 是否开启排行榜操作
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * is_integral	是	string	是否开启积分排行榜(1-开启，2-关闭)
     */
    @GET("member/is_integral")
    public Call<Result<Object>> memberIsIntegral(@QueryMap QMap map);

    /**
     * 消费记录•	查询用户vip信息
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     */
    @GET("member/consumption")
    public Call<Result<ConsumptionResult>> memberConsumption(@QueryMap QMap map);

    /**
     * 好题本列表
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * category_id	否	int	分类id 1-随堂练，2-自测卷，3-在线考试，4-杯赛，5-已做过的好题，没有的时候为所有
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/goodQuestion")
    public Call<Result<GoodQuestionResult>> memberGoodQuestion(@QueryMap QMap map);

    /**
     * 删除好题本记录
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * good_question_id	是	int	好题本记录id
     */
    @FormUrlEncoded
    @POST("member/delGoodQuestion")
    public Call<Result<Object>> memberDelGoodQuestion(@FieldMap QMap map);

    /**
     * 好题本查看解析
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * good_question_id	是	int	好题本记录id
     * logincode	是	string	登陆验证代码
     *
     * @return 包含html代码的解析（看是否需要处理成结构化的数组）
     */
    @GET("member/goodQuestionAnalysis")
    public Call<Result<String>> memberGoodQuestionAnalysis(@QueryMap QMap map);

    /**
     * 好题本重做
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * good_key	是	int	好题本key值
     * logincode	是	string	登陆验证代码
     */
    @GET("member/goodQuestionRedo")
    public Call<Result<QuestionRedoResult>> memberGoodQuestionRedo(@QueryMap QMap map);

    /**
     * 好题本重做处理答案
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * good_key	是	string	好题本重做key
     * answer	是	string	答案
     * logincode	是	string	登陆验证代码
     */
    @FormUrlEncoded
    @POST("member/goodQuestionResults")
    public Call<Result<QuestionResultsResult>> memberGoodQuestionResults(@FieldMap QMap map);

    /**
     * 错题本列表
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * category_id	否	int	分类id 1-随堂练，2-自测卷，3-在线考试，4-杯赛，5-已订正的错题本，没有的时候为所有
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/wrongQuestion")
    public Call<Result<WrongQuestionResult>> memberWrongQuestion(@QueryMap QMap map);

    /**
     * 删除好题本记录
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * wrong_question_id	是	int	好题本记录id
     */
    @FormUrlEncoded
    @POST("member/delWrongQuestion")
    public Call<Result<Object>> memberDelWrongQuestion(@FieldMap QMap map);

    /**
     * 错题本查看解析
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * wrong_question_id	是	int	错题本id
     * logincode	是	string	登陆验证代码
     *
     * @return 包含html代码的解析（看是否需要处理成结构化的数组）
     */
    @GET("member/wrongQuestionAnalysi")
    public Call<Result<String>> memberWrongQuestionAnalysi(@QueryMap QMap map);

    /**
     * 错题本重做
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * wrong_key	是	int	错题本key值
     * logincode	是	string	登陆验证代码
     */
    @GET("member/wrongQuestionRedo")
    public Call<Result<QuestionRedoResult>> memberWrongQuestionRedo(@QueryMap QMap map);

    /**
     * 错题本重做处理答案
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * wrong_key	是	string	错题本重做key
     * answer	是	string	答案
     * logincode	是	string	登陆验证代码
     */
    @FormUrlEncoded
    @POST("member/wrongQuestionResults")
    public Call<Result<QuestionResultsResult>> memberWrongQuestionResults(@FieldMap QMap map);

    /**
     * 我的课程列表
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * type_id	是	int	课程类型id只能为数字(1-知识点，2-杯赛)
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/myClass")
    public Call<Result<MyClassResult>> memberMyClass(@QueryMap QMap map);

    /**
     * 删除我的课程
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * class_record_id	是	int	课程记录id
     */
    @FormUrlEncoded
    @POST("member/delClass")
    public Call<Result<Object>> memberDelClass(@FieldMap QMap map);

    /**
     * 消息列表
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     */
    @GET("member/message")
    public Call<Result<MessageResult>> memberMessage(@QueryMap QMap map);

    /**
     * 删除消息记录
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * message_id	是	string	删除消息id，支持（单个或多个，多个的时候用，连接，如：1,4,5）
     */
    @FormUrlEncoded
    @POST("member/messageDel")
    public Call<Result<Object>> memberMessageDel(@FieldMap QMap map);

    /**
     * 学习进度
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * grade_id	否	int	年级id
     */
    @GET("member/learningProcess")
    public Call<Result<LearningProcessResult>> memberLearningProcess(@QueryMap QMap map);

    /**
     * 我的考试
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * type_id	是	int	课程类型id只能为数字(0-在线考试 ，1-知识点，2-杯赛)
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/myExamine")
    public Call<Result<MyExamineResult>> memberMyExamine(@QueryMap QMap map);

    /**
     * 查看考试结果统计
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * type_id	是	int	课程类型id只能为数字(1-知识点，2-杯赛)
     * examine_id	是	int	考试记录id
     */
    @GET("member/processingAnswers")
    public Call<Result<ProcessingAnswersResult>> memberProcessingAnswers(@QueryMap QMap map);

    /**
     * 删除考试记录
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * examine_id	是	int	考试记录id
     */
    @FormUrlEncoded
    @POST("member/delExamine")
    public Call<Result<Object>> memberDelExamine(@FieldMap QMap map);

    /**
     * 我的疑问
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/myAsk")
    public Call<Result<MyAskResult>> memberMyAsk(@QueryMap QMap map);

    /**
     * 我的视频留言
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/myVideoMess")
    public Call<Result<MyVideoMessageResult>> memberMyVideoMessage(@QueryMap QMap map);

    /**
     * 删除我的视频留言
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * message_id	是	int	视频留言记录id
     */
    @FormUrlEncoded
    @POST("member/delMess")
    public Call<Result<Object>> memberDelMessage(@FieldMap QMap map);

    /**
     * 我的考试留言
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * num	否	int	每页显示数量
     * page	否	int	第几页
     */
    @GET("member/myTestMess")
    public Call<Result<MyTestMessageResult>> memberMyTestMessage(@QueryMap QMap map);

    /**
     * 删除我的考试留言
     * time	是	string	时间戳
     * token	是	string	token
     * user_id	是	int	用户id
     * channel	是	int	频道id
     * logincode	是	string	登陆验证码
     * message_id	是	int	考试留言记录id
     */
    @FormUrlEncoded
    @POST("member/delTestMess")
    public Call<Result<Object>> memberDelTestMess(@FieldMap QMap map);

//    /**
//     * XXX
//     */
//    @GET("xxx_xxx")
//    public Call<Result<XxxXxx>> xxxXXX(@QueryMap QMap map);

//    /**
//     * XXX
//     */
//    @FormUrlEncoded
//    @POST("xxx_xxx")
//    public Call<Result<XxxXxx>> xxxXXX(@FieldMap QMap map);

}